# html 是 xml 的一个子集
# xpath 是在 xml 中搜索内容的一门语言

from lxml import etree

mybatisXml = """
<book>
    <id>1</id>
    <name>大明王朝</name>
    <price>1.23</price>
    <nick>臭豆腐</nick>
    <author>
        <nick id="10086">周6</nick>
        <nick id="10087">周7</nick>
        <nick id="10088">周8</nick>
        <nick id="10089">周9</nick>
        <div>
            <nick>周10</nick>
            <div>
                <nick>周11</nick>
            </div>
        </div>
        
        <span>
            <nick>周12</nick>
        </span>
    </author>
    
    <parent>
        <nick id="ppc">周66</nick>
        <nick id="ppcd">周7777</nick>
    </parent>
</book>
"""

print('-------------------- xml 字符串用 etree.XML() --------------------')
tree = etree.XML(mybatisXml)
# / 表示层级关系，第一个 / 是根节点
print('-------------------- / 表示层级关系，第一个 / 是根节点 --------------------')
result = tree.xpath('/book')
print(result)
# text() 获取文本
print('-------------------- text() 获取文本 --------------------')
result = tree.xpath('/book/name/text()')
print(result)

# 找全部作者1
print('-------------------- 找全部作者 1 --------------------')
result = tree.xpath('/book/author/nick/text()')
print(result)
result = tree.xpath('/book/author/div/nick/text()')
print(result)
result = tree.xpath('/book/author/div/div/nick/text()')
print(result)
result = tree.xpath('/book/author/span/nick/text()')
print(result)

# 找全部作者2
# // 表所有子孙后代
print('-------------------- 找全部作者 2 --------------------')
print('-------------------- // 表所有子孙后代 --------------------')
result = tree.xpath('/book/author//nick/text()')
print(result)

# * 表通配符
print('-------------------- * 表通配符 --------------------')
result = tree.xpath('/book/author/*/nick/text()')
print(result)